<?php

namespace App\Services\Netease;

class GroupServices extends BaseServices
{
    /**
     * 群组功能（高级群）-创建群
     * @param  $tname [群名称，最大长度64字节]
     * @param  $owner [群主用户帐号，最大长度32字节]
     * @param  $members [["aaa","bbb"](JsonArray对应的accid，如果解析出错会报414)，长度最大1024字节]  $member =['254878'];
     * @param  $announcement [群公告，最大长度1024字节]
     * @param  $intro [群描述，最大长度512字节]
     * @param  $msg [邀请发送的文字，最大长度150字节]
     * @param  $magree [管理后台建群时，0不需要被邀请人同意加入群，1需要被邀请人同意才可以加入群。其它会返回414。]
     * @param  $joinmode [群建好后，sdk操作时，0不用验证，1需要验证,2不允许任何人加入。其它返回414]
     * @param  $custom [自定义高级群扩展属性，第三方可以跟据此属性自定义扩展自己的群属性。（建议为json）,最大长度1024字节.]
     * @return $result      [返回array数组对象]
     */
    public function createGroup($tname, $owner, $members, $msg = '', $announcement = '', $intro = '', $magree = '0', $joinmode = '0', $custom = '0')
    {
        if (empty($tname) || empty($owner)) {
            return false;
        }
        $url = $this->url . 'team/create.action';
        $data = array(
            'tname' => $tname,
            'owner' => $owner,
            'members' => json_encode($members),
            'announcement' => $announcement,
            'intro' => $intro,
            'msg' => $msg,
            'magree' => $magree,
            'joinmode' => $joinmode,
            'custom' => $custom
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 群组功能（高级群）-拉人入群
     * @param  $tid [云信服务器产生，群唯一标识，创建群时会返回，最大长度128字节]
     * @param  $owner [群主用户帐号，最大长度32字节]
     * @param  $members [["aaa","bbb"](JsonArray对应的accid，如果解析出错会报414)，长度最大1024字节] $member =['254878'];
     * @param  $magree [管理后台建群时，0不需要被邀请人同意加入群，1需要被邀请人同意才可以加入群。其它会返回414。]
     * @param  $joinmode [群建好后，sdk操作时，0不用验证，1需要验证,2不允许任何人加入。其它返回414]
     * @param  $custom [自定义高级群扩展属性，第三方可以跟据此属性自定义扩展自己的群属性。（建议为json）,最大长度1024字节.]
     * @return $result      [返回array数组对象]
     */
    public function addIntoGroup($tid, $owner, $members, $magree = '0', $msg = '请您入伙')
    {
        if (empty($tid) || empty($owner) || empty($members)) {
            return false;
        }
        $url = $this->url . 'team/add.action';
        $data = array(
            'tid' => $tid,
            'owner' => $owner,
            'members' => json_encode($members),
            'magree' => $magree,
            'msg' => $msg
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 群组功能（高级群）-踢单人出群
     * @param  $tid [云信服务器产生，群唯一标识，创建群时会返回，最大长度128字节]
     * @param  $owner [群主用户帐号，最大长度32字节]
     * @param  $member [被移除人得accid，用户账号，最大长度字节]
     * @return $result      [返回array数组对象]
     */
    public function kickFromGroup($tid, $owner, $member)
    {
        if (empty($tid) || empty($owner) || empty($member)) {
            return false;
        }
        $url = $this->url . 'team/kick.action';
        $data = array(
            'tid' => $tid,
            'owner' => $owner,
            'member' => $member
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 群组功能（高级群）-踢多人出群
     * @param  $tid [云信服务器产生，群唯一标识，创建群时会返回，最大长度128字节]
     * @param  $owner [群主用户帐号，最大长度32字节]
     * @param  $member [被移除人得accid，用户账号，最大长度字节] $member 为 ["aaa","bbb"] JSON 格式
     * @return $result      [返回array数组对象]
     */
    public function kickFromGroups($tid, $owner, $member)
    {
        if (empty($tid) || empty($owner) || empty($member)) {
            return false;
        }
        $url = $this->url . 'team/kick.action';
        $data = array(
            'tid' => $tid,
            'owner' => $owner,
            'members' => $member
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 群组功能（高级群）-解散群
     * @param  $tid [云信服务器产生，群唯一标识，创建群时会返回，最大长度128字节]
     * @param  $owner [群主用户帐号，最大长度32字节]
     * @return $result      [返回array数组对象]
     */
    public function removeGroup($tid, $owner)
    {
        if (empty($tid) || empty($owner)) {
            return false;
        }
        $url = $this->url . 'team/remove.action';
        $data = array(
            'tid' => $tid,
            'owner' => $owner
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 群组功能（高级群）-更新群资料
     * @param  $tid [云信服务器产生，群唯一标识，创建群时会返回，最大长度128字节]
     * @param  $owner [群主用户帐号，最大长度32字节]
     * @param  $tname [群主用户帐号，最大长度32字节]
     * @param  $announcement [群公告，最大长度1024字节]
     * @param  $intro [群描述，最大长度512字节]
     * @param  $joinmode [群建好后，sdk操作时，0不用验证，1需要验证,2不允许任何人加入。其它返回414]
     * @param  $custom [自定义高级群扩展属性，第三方可以跟据此属性自定义扩展自己的群属性。（建议为json）,最大长度1024字节.]
     * @return $result      [返回array数组对象]
     */
    public function updateGroup($tid, $owner, $tname, $announcement = '', $intro = '', $joinmode = '0', $custom = '')
    {
        if (empty($tid) || empty($owner) || empty($tname)) {
            return false;
        }
        $url = $this->url . 'team/update.action';
        $data = array(
            'tid' => $tid,
            'owner' => $owner,
            'tname' => $tname,
            'announcement' => $announcement,
            'intro' => $intro,
            'joinmode' => $joinmode,
            'custom' => $custom
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 群组功能（高级群）-群信息与成员列表查询
     * @param  $tids [群tid列表，如[\"3083\",\"3084"]]  ['3940454999']
     * @param  $ope [1表示带上群成员列表，0表示不带群成员列表，只返回群信息]
     * @return $result      [返回array数组对象]
     */
    public function queryGroup($tids, $ope = '1')
    {
        if (empty($tids)) {
            return false;
        }
        $url = $this->url . 'team/query.action';
        $data = array(
            'tids' => json_encode($tids),
            'ope' => $ope
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 群组功能（高级群）获取群组详细信息
     * @param  $tids [群tid列表，如[\"3083\",\"3084"]]  ['3940454999']
     * @return $result      [返回array数组对象]
     */
    public function queryDetailGroup($tid)
    {
        if (empty($tid)) {
            return false;
        }
        $url = $this->url . 'team/queryDetail.action';
        $data = array(
            'tid' => $tid,
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 群组功能（高级群）-移交群主
     * @param  $tid [云信服务器产生，群唯一标识，创建群时会返回，最大长度128字节]
     * @param  $owner [群主用户帐号，最大长度32字节]
     * @param  $newowner [新群主帐号，最大长度32字节]
     * @param  $leave [1:群主解除群主后离开群，2：群主解除群主后成为普通成员。其它414]
     * @return $result      [返回array数组对象]
     */
    public function changeGroupOwner($tid, $owner, $newowner, $leave = '2')
    {
        if (empty($tid) || empty($owner) || empty($newowner)) {
            return false;
        }
        $url = $this->url . 'team/changeOwner.action';
        $data = array(
            'tid' => $tid,
            'owner' => $owner,
            'newowner' => $newowner,
            'leave' => $leave
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 群组功能（高级群）-任命管理员
     * @param  $tid [云信服务器产生，群唯一标识，创建群时会返回，最大长度128字节]
     * @param  $owner [群主用户帐号，最大长度32字节]
     * @param  $members [["aaa","bbb"](JsonArray对应的accid，如果解析出错会报414)，长度最大1024字节（群成员最多10个）]
     * @return $result      [返回array数组对象]
     */
    public function addGroupManager($tid, $owner, $members)
    {
        if (empty($tid) || empty($owner) || empty($members)) {
            return false;
        }
        $url = $this->url . 'team/addManager.action';
        $data = array(
            'tid' => $tid,
            'owner' => $owner,
            'members' => json_encode($members)
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 群组功能（高级群）-移除管理员
     * @param  $tid [云信服务器产生，群唯一标识，创建群时会返回，最大长度128字节]
     * @param  $owner [群主用户帐号，最大长度32字节]
     * @param  $members [["aaa","bbb"](JsonArray对应的accid，如果解析出错会报414)，长度最大1024字节（群成员最多10个）]
     * @return $result      [返回array数组对象]
     */
    public function removeGroupManager($tid, $owner, $members)
    {
        if (empty($tid) || empty($owner) || empty($members)) {
            return false;
        }
        $url = $this->url . 'team/removeManager.action';
        $data = array(
            'tid' => $tid,
            'owner' => $owner,
            'members' => json_encode($members)
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 群组功能（高级群）-获取某用户所加入的群信息
     * @param  $accid [要查询用户的accid]
     * @return $result      [返回array数组对象]
     */
    public function joinTeams($accid)
    {
        if (empty($accid)) {
            return false;
        }
        $url = $this->url . 'team/joinTeams.action';
        $data = array(
            'accid' => $accid
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 群组功能（高级群）-修改群昵称
     * @param  $tid [云信服务器产生，群唯一标识，创建群时会返回，最大长度128字节]
     * @param  $owner [群主用户帐号，最大长度32字节]
     * @param  $accid [要修改群昵称对应群成员的accid]
     * @param  $nick [accid对应的群昵称，最大长度32字节。]
     * @return $result      [返回array数组对象]
     */
    public function updateGroupNick($tid, $owner, $accid, $nick)
    {
        if (empty($tid) || empty($owner) || empty($accid) || empty($nick)) {
            return false;
        }
        $url = $this->url . 'team/updateTeamNick.action';
        $data = array(
            'tid' => $tid,
            'owner' => $owner,
            'accid' => $accid,
            'nick' => $nick
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 群组功能（高级群）-修改消息提醒开关
     * @param  $tid [云信服务器产生，群唯一标识，创建群时会返回，最大长度128字节]
     * @param  $ope 1：关闭消息提醒，2：打开消息提醒，其他值无效
     * @param  $accid [群成员的accid]
     * @return $result      [返回array数组对象]
     */
    public function muteTeamGroup($tid, $accid, $ope)
    {
        if (empty($tid) || empty($accid) || empty($ope)) {
            return false;
        }
        $url = $this->url . 'team/updateTeamNick.action';
        $data = array(
            'tid' => $tid,
            'accid' => $accid,
            'ope' => $ope
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 群组功能（高级群）-禁言群成员
     * @param  $tid [云信服务器产生，群唯一标识，创建群时会返回，最大长度128字节]
     * @param  $owner    群主accid
     * @param  $accid [群成员的accid]
     * @param  $mute 1-禁言，0-解禁
     * @return $result      [返回array数组对象]
     */
    public function muteTlistGroup($tid, $owner, $accid, $mute)
    {
        if (empty($tid) || empty($owner) || empty($accid)) {
            return false;
        }
        $url = $this->url . 'team/muteTlist.action';
        $data = array(
            'tid' => $tid,
            'owner' => $owner,
            'accid' => $accid,
            'mute' => $mute
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 群组功能（高级群）-主动退群
     * @param  $tid [云信服务器产生，群唯一标识，创建群时会返回，最大长度128字节]
     * @param  $accid [要修改群昵称对应群成员的accid]
     * @return $result      [返回array数组对象]
     */
    public function leaveGroup($tid, $accid)
    {
        if (empty($tid) || empty($accid)) {
            return false;
        }
        $url = $this->url . 'team/leave.action';
        $data = array(
            'tid' => $tid,
            'accid' => $accid,
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 群组功能（高级群）-将群组整体禁言
     * @param  $tid [云信服务器产生，群唯一标识，创建群时会返回，最大长度128字节]
     * @param  $owner    群主的accid
     * @param  $muteType    禁言类型 0:解除禁言，1:禁言普通成员 3:禁言整个群(包括群主)
     * @return $result      [返回array数组对象]
     */
    public function muteTlistAllGroup($tid, $owner, $muteType = '1')
    {
        if (empty($tid) || empty($owner) || empty($muteType)) {
            return false;
        }
        $url = $this->url . 'team/muteTlistAll.action';
        $data = array(
            'tid' => $tid,
            'owner' => $owner,
            'muteType' => $muteType,
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 群组功能（高级群）-获取群组禁言列表
     * @param  $tid [云信服务器产生，群唯一标识，创建群时会返回，最大长度128字节]
     * @param  $owner    群主的accid
     * @return $result      [返回array数组对象]
     */
    public function listTeamMuteGroup($tid, $owner)
    {
        if (empty($tid) || empty($owner)) {
            return false;
        }
        $url = $this->url . 'team/listTeamMute.action';
        $data = array(
            'tid' => $tid,
            'owner' => $owner,
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

}
